/*
******************************************************************************************************* 
**  Copyright (C) 2019, 苏州检易生物科技有限公司 
**  All rights reserved. 
** 
**  FileName:       	MBUF.h
**  Description:	
**  Author:        	 
**  Version				v0.1
**  Date:           	2019-06-17
**	Function List： 
**  History:         
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*                                              	防止重复包含
*********************************************************************************************************
*/
#ifndef _MBUF_H_
#define _MBUF_H_
/*
*********************************************************************************************************
*                                              	调试开关
*********************************************************************************************************
*/



/*
*********************************************************************************************************
*                                              	头文件
*********************************************************************************************************
*/
#include <stdint.h>

#include "log_console.h"
#include <rtthread.h>
/*
*********************************************************************************************************
*                                              	宏定义
*********************************************************************************************************
*/
#define  	MBUF_SIZE                              64

#define		CFG_MBUF_POOL_SIZE						128u

/*
*********************************************************************************************************
*                                              枚举和结构体类型定义
*********************************************************************************************************
*/
/**
 * @note struct mbuf，内存控制块的头部结构体
 */
struct mbuf{
	struct mbuf *next;         //指向下一块内存的指针，用于构成内存链
	uint16_t tot_len;          //余下内存链的总共长度
	uint16_t reserved;
	uint8_t  payload[MBUF_SIZE];
};

/*
*********************************************************************************************************
*                                              	全局变量声明
*********************************************************************************************************
*/



/*
*********************************************************************************************************
*                                              	函数声明
*********************************************************************************************************
*/


/*
 *******************************************************************************
 *  @brief   mbuf_init 内存分配池初始化
 *  @param   无
 *  @return   0
 *           -1
 *******************************************************************************
 */
int mbuf_init(void);

/*
 *******************************************************************************
 *  @brief   mbuf_alloc 分配一块固定大小的内存
 *  @param   size 表示数据域的大小、
 *  @return  返回分配的内存链，如果分配失败返回NULL
 *******************************************************************************
 */
struct mbuf *mbuf_alloc(uint16_t size);

/*
 *******************************************************************************
 *  @brief   mbuf_free 释放内存
 *  @param   需要释放的内存，如果引用计数等于1则直接释放，否则只讲引用计数减一
 *  @return  返回分配的内存链，如果分配失败返回NULL
 *******************************************************************************
 */
uint8_t mbuf_free(struct mbuf *p);

/*
 *******************************************************************************
 *  @brief   mbuf_read_total 将buf里的内容从头部开始完全读出到指定的内存中去
 *  @param   p 需要读取的buf块
 *           offset  读取偏移
 *           p_read 读取后存放的内存指针
 *           size   需要读取的最大值
 *  @return  -1  读取失败
 *           大于等于0 表示读取的字节数
 *******************************************************************************
 */
int mbuf_read(struct mbuf *p,uint8_t *p_read,uint16_t size);

/*
 *******************************************************************************
 *  @brief   mbuf_write_total 内存指向的内容写入buf控制块，从头部开始写入
 *  @param   p 需要写入的buf块
 *           offset  写入偏移
 *           p_write 需要写入存放的内存指针
 *           size    写入内存的大小
 *  @return  -1  写入失败
 *           大于等于0 表示写入的字节数
 *******************************************************************************
 */
int mbuf_write(struct mbuf *p,uint8_t *p_write,uint16_t size);


#endif
